/**
  ******************************************************************************
  * @file           : hlkb35.h
  * @brief          : Header for main.c file.
  *                   This file contains the common defines of the application.
  ******************************************************************************
  * @attention
  *
  ******************************************************************************
  */

/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __HLKB35_H
#define __HLKB35_H

#include <stdint.h>
#include "core_cm4.h"

#define HLKB35_UART                     UART9
#define HLKB35_UART_BAUDRATE            115200
#define HLKB35_UART_IRQn                UART9_IRQn
#define HLKB35_UART_IRQHandler          UART9_IRQHandler
#define HLKB35_UART_EnableClock()       LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_UART9)
#define HLKB35_UART_IO_EnableClock()    LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOD)

#define HLKB35_OUTTIMER                 TIM11
#define HLKB35_OUTTIMER_IRQn            TIM1_TRG_COM_TIM11_IRQn
#define HLKB35_OUTTIMER_IRQHandler      TIM1_TRG_COM_TIM11_IRQHandler
#define HLKB35_OUTTIMER_EnableClock()   LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_TIM11)

#define HLKB35_GPIO_Port                HLKB35_RX_GPIO_Port
#define HLKB35_GPIO_LL_AF               LL_GPIO_AF_11

#define HLKB35_RX_Pin                   GPIO_PIN_14
#define HLKB35_RX_LL_Pin                LL_GPIO_PIN_14
#define HLKB35_RX_GPIO_Port             GPIOD

#define HLKB35_TX_Pin                   GPIO_PIN_15
#define HLKB35_TX_LL_Pin                LL_GPIO_PIN_15
#define HLKB35_TX_GPIO_Port             GPIOD

#define HLKB35_ES0_Pin                  GPIO_PIN_10
#define HLKB35_ES0_LL_Pin               LL_GPIO_PIN_10
#define HLKB35_ES0_GPIO_Port            GPIOD
#define hlkb35_es0(x)                   x?(HLKB35_ES0_GPIO_Port->BSRR = (uint32_t)HLKB35_ES0_Pin):(HLKB35_ES0_GPIO_Port->BSRR = ((uint32_t)HLKB35_ES0_Pin << 16U))

#define HLKB35_RST_Pin                  GPIO_PIN_11
#define HLKB35_RST_LL_Pin               LL_GPIO_PIN_11
#define HLKB35_RST_GPIO_Port            GPIOD
#define hlkb35_rst(x)                   x?(HLKB35_RST_GPIO_Port->BSRR = (uint32_t)HLKB35_RST_Pin):(HLKB35_RST_GPIO_Port->BSRR = ((uint32_t)HLKB35_RST_Pin << 16U))

#define HLKB35_WIFI_Pin                 GPIO_PIN_12
#define HLKB35_WIFI_LL_Pin              LL_GPIO_PIN_12
#define HLKB35_WIFI_GPIO_Port           GPIOD

#define HLK_TCP_Pin                     GPIO_PIN_13
#define HLK_TCP_LL_Pin                  LL_GPIO_PIN_13
#define HLK_TCP_GPIO_Port               GPIOD

#define HLKB35_RECV_QUE_LENGTH          5
#define HLKB35_RECV_QUE_ITEMSIZE        sizeof(Hlkb35_RecvBufStru)

#define HLKB35_FRAME_FIXLEN             8u
#define HLKB35_FRAME_BUFLEN             HLKB35_FRAME_FIXLEN + 4

typedef struct
{
  uint8_t cnt;
  uint8_t buf[HLKB35_FRAME_BUFLEN];
}Hlkb35_RecvBufStru;

extern void hlkb35_uart_init(void);
extern void hlkb35_send_str(const char *buf);
extern void hlkb35_send_buf(const uint8_t *buf, uint32_t len);

extern void hlkb35_protc_init(void);
extern void hlkb35_protc_process(void);
extern void hlkb35_protc_rcvisr(__I uint8_t rcvdt);
extern void hlkb35_protc_rcvtimeout(void);

#endif /* __HLKB35_H */
